package pokerSaloon.controller;

import java.rmi.RemoteException;

import pokerSaloon.model.UserImpl;
import pokerSaloon.vue.fenJeu;

public class PartieController extends Controller{
	
	
	public PartieController(){
		super();
		this.setView(new fenJeu(this));
	}
	
    /**
     * Se coucher. L'utilisateur abandonne le coup.
     */
    public void seCoucher() {
        try {
            UserImpl.getInstance().getPartie().toFold(UserImpl.getInstance());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    /**
     * Parler (check)
     * @return true si l'utilisateur a pu parler,
     *         false sinon.
     */
    public void parler() {
        try {      
           UserImpl.getInstance().getPartie().toCheck(UserImpl.getInstance());
        } catch (RemoteException ex) {
            System.out.println("Exception : " + ex);
        }
    }
    
    /**
     * Suivre la mise du joueur pr�c�cent.
     * @return true si l'utilisateur a pu parler,
     *         false sinon.
     */
    public void suivre() {
        try {
            relancer(UserImpl.getInstance().getPartie().getMisePrec() - UserImpl.getInstance().getMise());
        } catch (RemoteException ex) {
            System.out.println("Exception : " + ex);
        }
    }

    /**
     * Relancer d'un certain montant.
     * @param montant de la relance.
     */
    public void relancer(int montant) {
        try {
            int smallBlind = UserImpl.getInstance().getPartie().getVAL_BIG_BLIND() / 2;
            int cave = UserImpl.getInstance().getCave();
            
            if (montant > cave) {
               getView().afficheMsgDialog("Vous ne pouvez pas miser " + montant + " alors que vous n'avez que " + cave + " !", "Erreur");
            } else if (montant == cave) {
                tapis();
            } else if (montant < smallBlind) {
            	getView().afficheMsgDialog("La somme de " + montant + " est insuffisante, mise minimum de " + smallBlind + ".", "Erreur");
            } else if (montant + UserImpl.getInstance().getMise() < UserImpl.getInstance().getPartie().getMisePrec()) {
            	getView().afficheMsgDialog("La somme de " + montant + " est insuffisante pour rester en jeu.", "Erreur");
            } else {
                UserImpl.getInstance().getPartie().toRaise(UserImpl.getInstance(), montant);
            }
        } catch (Exception ex) {
            System.out.println("Exception : " + ex);
        }
    }

    /**
     * Miser son tapis.
     */
    public void tapis() {
        try {      
            UserImpl.getInstance().getPartie().allin(UserImpl.getInstance());           
        } catch (Exception ex) {
            System.out.println("Exception : " + ex);
        }
    }

	public void quitterPartie() {
		   Controller controllerAttente = FactoryController.getListePartieController();
           controllerAttente.getView().displayView();
           this.getView().removeView();		
	}
		
}
